package main

import (
	_ "ginProject/config/init"
	"ginProject/internal/request"
	"ginProject/router"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-playground/validator/v10"
	"go.uber.org/zap"
)

func main() {
	// init 函数在main函数之前执行 顺序有优先级
	//基于init函数的执行顺序特性  我们可以把一些需要在项目启动前进行初始化的操作 放到init函数中
	// 哪些操作 可以放在init函数中
	// 考虑框架  1. 公共的配置项  2. 数据库配置..... 3. 整个框架中大量使用的类库  比如 zap日志
	// init函数应该放在哪 在main函数中又该如何调用
	// 灵活放(想放哪里都可以) 注意： init函数命名  init()  后续进行一系列的操作  加载初始化配置等等
	// 在main中只调用 让他进行初始化  匿名调用 _

	//初始化gin
	r := gin.Default()

	//注册验证器
	if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
		v.RegisterValidation("validateMobile", request.ValidateMobile)
	}
	//路由组设置  版本号/模块/接口名   v1/user/login
	router.Router(r) //将原先的路由组设置放到router包中  拆分开
	zap.S().Info("启动成功：：：Host:127.0.0.1 Port:9999")
	r.Run(":9999") // 监听并在 0.0.0.0:8080 上启动服务
}
